package com.cskaoyan.javase.array._4operation._0traverse;

import java.util.Arrays;

/**
 * 数组的遍历除了可以使用for循环外，还可以使用增强for循环。
 * (关于增强for会在学习集合时，详细去讲，现在先了解一下基本使用。)
 *
 * 增强for循环（也叫foreach），以遍历并打印数组元素为例，它的语法是：
 * for(数据类型 变量名 : 要遍历的数组或者集合){
 *   System.out.println(变量名);
 * }
 * 其中:
 * 数据类型是容器中元素的数据类型
 * 变量名 代表着容器中的每一个元素,这意味着增强for循环是直接遍历元素的
 *      而普通for实际上是遍历数组的下标
 *
 * 增强for vs 普通for
 * 增强for的优点:
 *      1.语法结构更简洁,尤其是配合快捷键"iter"使用,非常便捷.
 *      2.增强for由于天生设计的优势,它的遍历效率更高(相对于普通for)
 *      所以,从优点的角度出发,遍历数组时如果能够用增强for就优先选择它,否则就用普通for
 * 增强for的缺点(不能使用增强for的场景):
 *      1.所有需要使用下标的场景,增强for都无法使用.
 *      2.(最主要)
 *          增强for语法在设计的时候,就仅仅将它当成一种遍历容器的工具(迭代器)
 *          为了提升效率,增强for放弃了在遍历时修改的功能
 *          增强for当中是不能修改元素取值
 *          (多线程)
 *
 *
 * @since 15:49
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo3 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        for (int ele : arr) {
            // ele直接代表容器中的每一个元素
            System.out.println(ele);
        }
        String[] arr2 = {"123", "666"};
        // iter快捷键
        for (String ele : arr2) {
            System.out.println(ele);
        }

        // 需求: 给一个int数组,将数组的元素全部+1
        int[] target = {666, 777, 888};
        /*for (int i = 0; i < target.length; i++) {
            target[i]++;
        }*/
        System.out.println(Arrays.toString(target));

        for (int ele : target) {
            // the value changed at 'ele++' is never used
            ele++;
        }
        System.out.println(Arrays.toString(target));
    }
}
